// Loesung_von_Aufgabe_6.9_3_Einzelspalt

float y1 = 195; // erste Elementarwelle
float y2 = 235; // letzte Elementarwelle
float yDelta = 2; // Abstand zwischen den Elementarwellen
float L = 10; // Wellenlänge

void setup() 
{
  size (400, 400);
  background(255);
}

void draw() 
{
  loadPixels(); // Lädt die Pixel der ganzen Fläche als ein eindimensionales Array. 

  // Mittels der beiden for-Schleifen wird die Farbe der einzelnen Pixel verändert.
  for (int y = 0; y < height; y++) // Spalten durchlaufen
  {
    for (int x = 0; x < width; x++) // Zeilen durchlaufen
    {
      float e = 0; // Elongation

      for (float welleY = y1; welleY < y2; welleY += yDelta)
      {
        // Welle
        float r = sqrt(x*x+(y-welleY)*(y-welleY)); // Berechnung von r1 mittels Pythagoras
        float w = 2 * PI * r / L ; // Der Winkel w1 wird in Abhängigkeit von r berechnet
        e += 1.0/7.0 * sin(w);  // Um die Helligkeit zu reduzieren, wird die Elongation durch 7 geteilt
      }

      /* Das Pixel-Array pixels[] wird mit Farbwerten zwischen 0 (schwarz) und 256 (weiß) gefüllt,
       da die Elongation e sich zwischen +1 und -1 ändert. */
      pixels[y * width + x] = color(128 + e * 128);
    }
  }
  updatePixels(); // Geänderte Pixel werden gezeichnet

  // Der Einzelspalt wird gezeichnet
  noStroke();
  fill(0, 0, 200);
  rect(0, 0, 10, 195); // oben
  rect(0, 235, 10, 165);  // unten
}